"use strict";

const fs = require("fs");
const qs = require("qs");
const path = require("path");

const AlipayFormData = require("alipay-sdk/lib/form").default;

const alipaySdk = require("../utils/alipayUtil");

/**
 * 返回支付链接（PC支付接口）
 */
async function AlipayController(ctx, next) {
  console.log(9999, ctx.query);
  const { id, subject, body, amount, returnUrl } = ctx.query;

  if (!id || !amount || !subject || !body || !returnUrl) {
    ctx.body = {
      code: 503,
      message: "缺少参数",
    };
    return;
  }

  const formData = new AlipayFormData();
  formData.setMethod("get");
  formData.addField("appId", "2021000118610018");
  formData.addField("charset", "utf-8");
  formData.addField("signType", "RSA2");

  // formData.addField("notifyUrl", "https://www.baidu.com"); // 支付成功回调地址，必须为可以直接访问的地址，不能带参数
  formData.addField("returnUrl", returnUrl); // 支付成功后重定向 ，加在这里才有效果,不是加在bizContent 里面
  formData.addField("bizContent", {
    outTradeNo: id, // 【必选】商户订单号：64个字符内，包含数字，字母，下划线；需要保证在商户端不重复
    productCode: "FAST_INSTANT_TRADE_PAY", // 【必选】销售产品码，目前仅支持FAST_INSTANT_TRADE_PAY
    totalAmount: Number(amount).toFixed(2), // 【必选】订单总金额，精确到小数点后两位
    subject: subject, // 【必选】 订单标题
    body: body, // 【可选】订单描述
  });

  /**
   * exec对应参数：
   * method（调用支付宝api）
   * params（api请求的参数（包含“公共请求参数”和“业务参数”））
   * options（validateSign，formData，log）
   */
  const result = await alipaySdk.exec(
    "alipay.trade.page.pay",
    {},
    { formData }
  );

  ctx.body = {
    code: 200,
    result,
  };
}

module.exports = AlipayController;
